﻿//(c) Copyright [2015] Hewlett-Packard Enterprise Development, L.P.
//All rights reserved.
//Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
//1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
//2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.

//THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 
//THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS 
//BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 
//OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 
//OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
using HP.HPTRIM.SDK;
using log4net;
using System;
using System.IO;
using System.Linq;

namespace HP.HPTRIM.Samples.Thumbnails
{
    /// <summary>
    /// A TRIM event processor add-in to create a thumbnail for an image file.
    /// </summary>
    public class ThumbnailEvent : TrimEventProcessorAddIn
    {

        private static readonly ILog _log = LogManager.GetLogger(typeof(ThumbnailEvent));
        public ThumbnailEvent()
        {
        }

        public override void ProcessEvent(Database db, TrimEvent eventData)
        {
            if (log4net.GlobalContext.Properties["TrimPath"] == null)
            {
                log4net.GlobalContext.Properties["TrimPath"] = db.GetTRIMFolder(TrimPathType.AuditLog, true);
            }

            string[] extensions = new string[] { ".png", ".jpg", ".gif", ".jpeg", ".bmp" };
            _log.Info("Starting event.");


            try
            {
                if (eventData.ObjectType == BaseObjectTypes.Record
                    && (eventData.EventType == Events.DocAttached))
                {
                    if (extensions.Any(eventData.ExtraDetails.ToLower().Contains))
                    {
                        Record record = db.FindTrimObjectByUri(BaseObjectTypes.Record, eventData.ObjectUri) as Record;

                        if (record != null)
                        {
                            if (extensions.Any(Path.GetExtension(record.SuggestedFileName).ToLower().EndsWith))
                            {
                                using (TempFile recordFile = new TempFile(record))
                                {
                                    ThumbnailGenerator generator = new ThumbnailGenerator(recordFile.FilePath, record.SuggestedFileName);
                                    using (TempFile renditionFile = generator.MakeThumbnail())
                                    {
                                        record.SetThumbnailRendition(renditionFile);
                                    }
                                }
                            }

                        }
                    }
                }

            }
            catch (Exception ex)
            {
                _log.Error(ex.Message, ex);
            }

        }

    };
}
